package com.gopay.remote.solution;

import com.gopay.remote.solution.vo.CopyTransDtlInfo;
import com.gopay.remote.solution.vo.PerSoluTranInfo;
import com.gopay.remote.solution.vo.SsAcctSolution;
import com.gopay.remote.solution.vo.SsTranBasicSolution;

import java.util.List;
import java.util.Map;

/**
 * 个性化方案远程管理接口
 * 
 * @PerSoluManageRemoteService.java
 * @author MA HUAN
 * @2013-5-16 下午5:17:00 www.gopay.com.cn Inc.All rights reserved.
 */
public interface PerSoluManageRemoteService {
	
	/**
	 * ui-config
	 * 
	 * @param acctProdCode
	 * @return
	 */
	SsAcctSolution findAcctUIConfigSolution(String acctId);
	
	/**
	 * uiconfig设置
	 * 
	 * @param ssApSolution
	 * @param gopayIntTxnCd
	 * @return
	 */
	String modifyAcctUIConfigSolution(SsAcctSolution ssAcctSolution);

    /**
     * 根据账户ID获取账户下可用交易列表
     * 
     * @param acctId
     * @return
     */
    public PerSoluTranInfo findPerSoluTranInfo(String acctId);
    
    /**
     * 根据账户ID获取账户收益分配方案
     * 
     * @param acctId
     * @return
     */
    public SsAcctSolution findAcctGainSolution(String acctId);

    /**
     * 获取指定账户的指定交易的交易基础方案信息
     * 
     * @param acctId
     * @param gopayIntTxnCd
     * @return
     */
    public SsTranBasicSolution findTranBasicSolu(String acctId, String gopayIntTxnCd);

    /**
     * 编辑指定账户的指定交易的交易基础方案信息
     * 重载增加账户号，用于精准清理个性化通用方案 add by wangdong 20160908
     * @param gopayIntTxnCd
     * @param solution
     * @param acctId
     * @return
     */
    public String editTranBasicSoluByIntTxnCd(String gopayIntTxnCd, SsTranBasicSolution solution,String acctId);

    /**
     * 保存指定账户的指定交易的交易基础方案信息
     * 
     * @param ssTranBasicSolution
     * @param acctId
     * @param gopayIntTxnCd
     * @return
     */
    public String saveTranBasicSoluByIntTxnCd(SsTranBasicSolution ssTranBasicSolution, String acctId,
            String gopayIntTxnCd);

    /**
     * 查询特定账户可用交易信息
     * 
     * @param acctId
     * @return
     */
    public SsAcctSolution findAcctTransSolution(String acctId);

    /**
     * 查询特定账户指定交易手续费方案信息
     * 
     * @param acctId
     * @param intTxnCds
     * @return
     */
    public SsAcctSolution findAcctFeeSolution(String acctId, String intTxnCds);

    /**
     * 查询特定账户指定交易清算渠道方案信息
     * 
     * @param acctId
     * @param intTxnCds
     * @return
     */
    public SsAcctSolution findAcctPayChannSolution(String acctId, String intTxnCds);

    /**
     * 修改特定账户交易方案信息
     * 
     * @param ssAcctSolution
     * @return
     */
    public String modifyAcctTransSolution(SsAcctSolution ssAcctSolution);
    
    /**
     * 修改特定账户指定交易手续费方案信息
     * 
     * @param ssAcctSolution
     * @param intTxnCd
     * @return
     */
    public String modifyAcctFeeSolution(SsAcctSolution ssAcctSolution, String intTxnCd);

    /**
     * 修改特定账户指定交易清算渠道方案信息
     * 
     * @param ssAcctSolution
     * @param intTxnCd
     * @return
     */
    public String modifyAcctPayChannSolution(SsAcctSolution ssAcctSolution, String intTxnCd);
    
    
    /**
     * 修改特定账户收益分配方案信息
     * 
     * @param acctId
     * @return
     */
    public String modifyAcctGainSolution(SsAcctSolution ssAcctSolution);
    
    
    /**
     * 修改特定账户佣金额度方案信息
     * 
     * @param acctId
     * @return
     */
    public String modifyGpComConfSolution(SsAcctSolution ssAcctSolution);
    /**
     * 修改特定账户佣金额度方案信息
     * 
     * @param acctId
     * @return
     */
    public String modifyGpRiskFundConfSolution(SsAcctSolution ssAcctSolution);

    /**
     * 根据账户ID获取账户佣金方案
     * 
     * @param acctId
     * @return
     */
    public SsAcctSolution findAcctGpComConfSolution(String acctId);
    /**
     * 根据账户ID获取账户佣金方案
     * 
     * @param acctId
     * @return
     */
    public SsAcctSolution findAcctGpRiskFundConfSolution(String acctId);
    
    /**
     * 查询特定账户指定交易返润方案信息
     * 
     * @param acctId
     * @param intTxnCd
     * @return
     */
    public SsAcctSolution findAcctProfitSolution(String acctId, String intTxnCd);
    
    /**
     * 修改特定账户指定交易返润方案信息
     * 
     * @param ssAcctSolution
     * @param intTxnCd
     * @return
     */
    public String modifyAcctProfitSolution(SsAcctSolution ssAcctSolution, String intTxnCd);

    /**
     * 查询特定账户指定交易结算方案信息
     *
     * @param acctId
     * @param intTxnCds
     * @return
     */
    public SsAcctSolution findAcctSettleSolution(String acctId, String intTxnCds);

    /**
     * 查询特定账户指定交易基础方案信息
     *
     * @param acctId
     * @param intTxnCds
     * @return
     */
    public SsTranBasicSolution findAcctTransBasicSolution(String acctId, String intTxnCds);
    
    /**
     * 修改特定账户指定交易结算方案信息
     * 
     * @param ssAcctSolution
     * @param intTxnCd
     * @return
     */
    public String modifyAcctSettleSolution(SsAcctSolution ssAcctSolution, String intTxnCd);
    
    /**
     * 返回账户方案是否已经 个性化
     * @param acctId
     * @return
     */
    Map<String, String> findRelMapByAcctId(String acctId, String intTxnCd);

    /**
     * 用于复制方案，仅查询手续费正常交易方案
     * @param acctId
     * @return
     */
    List<CopyTransDtlInfo> findAcctPerSoluByAcctId(String acctId);

}
